package ar.org.sstuyv.regularizacion

import grails.converters.JSON

import org.springframework.dao.DataIntegrityViolationException

class EstadoDeConsolidacionController {

	static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

	def index() {
		redirect(action: "list", params: params)
	}

	def list(Integer max) {
		params.max = Math.min(max ?: 10, 100)
		[estadoDeConsolidacionInstanceList: EstadoDeConsolidacion.list(params), estadoDeConsolidacionInstanceTotal: EstadoDeConsolidacion.count()]
	}

	def create() {
		[estadoDeConsolidacionInstance: new EstadoDeConsolidacion(params)]
	}

	//    def save() {
	//        def estadoDeConsolidacionInstance = new EstadoDeConsolidacion(params)
	//        if (!estadoDeConsolidacionInstance.save(flush: true)) {
	//            render(view: "create", model: [estadoDeConsolidacionInstance: estadoDeConsolidacionInstance])
	//            return
	//        }
	//
	//        flash.message = message(code: 'default.created.message', args: [message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'), estadoDeConsolidacionInstance.id])
	//        redirect(action: "show", id: estadoDeConsolidacionInstance.id)
	//    }

	def show(Long id) {
		def estadoDeConsolidacionInstance = EstadoDeConsolidacion.get(id)
		if (!estadoDeConsolidacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'),
				id
			])
			redirect(action: "list")
			return
		}

		[estadoDeConsolidacionInstance: estadoDeConsolidacionInstance]
	}

	def edit(Long id) {
		def estadoDeConsolidacionInstance = EstadoDeConsolidacion.get(id)
		if (!estadoDeConsolidacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'),
				id
			])
			redirect(action: "list")
			return
		}

		[estadoDeConsolidacionInstance: estadoDeConsolidacionInstance]
	}

	//    def update(Long id, Long version) {
	//        def estadoDeConsolidacionInstance = EstadoDeConsolidacion.get(id)
	//        if (!estadoDeConsolidacionInstance) {
	//            flash.message = message(code: 'default.not.found.message', args: [message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'), id])
	//            redirect(action: "list")
	//            return
	//        }
	//
	//        if (version != null) {
	//            if (estadoDeConsolidacionInstance.version > version) {
	//                estadoDeConsolidacionInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
	//                          [message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion')] as Object[],
	//                          "Another user has updated this EstadoDeConsolidacion while you were editing")
	//                render(view: "edit", model: [estadoDeConsolidacionInstance: estadoDeConsolidacionInstance])
	//                return
	//            }
	//        }
	//
	//        estadoDeConsolidacionInstance.properties = params
	//
	//        if (!estadoDeConsolidacionInstance.save(flush: true)) {
	//            render(view: "edit", model: [estadoDeConsolidacionInstance: estadoDeConsolidacionInstance])
	//            return
	//        }
	//
	//        flash.message = message(code: 'default.updated.message', args: [message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'), estadoDeConsolidacionInstance.id])
	//        redirect(action: "show", id: estadoDeConsolidacionInstance.id)
	//    }

	def delete(Long id) {
		def estadoDeConsolidacionInstance = EstadoDeConsolidacion.get(id)
		if (!estadoDeConsolidacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'),
				id
			])
			redirect(action: "list")
			return
		}

		try {
			estadoDeConsolidacionInstance.delete(flush: true)
			flash.message = message(code: 'default.deleted.message', args: [
				message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'),
				id
			])
			redirect(action: "list")
		}
		catch (DataIntegrityViolationException e) {
			flash.message = message(code: 'default.not.deleted.message', args: [
				message(code: 'estadoDeConsolidacion.label', default: 'EstadoDeConsolidacion'),
				id
			])
			redirect(action: "show", id: id)
		}
	}


	def save() {

		if (!params.nombre){
			if(params.id == "_empty") {
				redirect(controller: 'IIUURegularizacion', action: 'save', params:params)
			} else {
				redirect(controller: 'IIUURegularizacion', action: 'update', params:params)
			}
		} else {

			EstadoDeConsolidacion estado

			def nombre = params.nombre

			def estadoCriteria = EstadoDeConsolidacion.createCriteria().list { like("nombre", nombre) };

			if (!estadoCriteria){
				estado = new EstadoDeConsolidacion();
				estado.setNombre(params.nombre)
				estado.save(flush: true)
			}

			render ""

		}
	}

	def update = {
		
		if (!params.nombre){
			if(params.id == "_empty") {
				redirect(controller: 'IIUURegularizacion', action: 'save', params:params)
			} else {
				redirect(controller: 'IIUURegularizacion', action: 'update', params:params)	
			}
		} else {
			def estado = EstadoDeConsolidacion.get(params.id.toLong())
			if (estado) {
				if (params.version) {
					def version = params.version.toLong()
					if (estado.version > version) {
						render "error"
					}
				}

				def nombre = params.nombre
				def estadoCriteria = EstadoDeConsolidacion.createCriteria().list { like("nombre", nombre) };

				if (!estadoCriteria){
					estado.setNombre(params.nombre)
					estado.save(flush: true)
				}

				if (estado.save(flush: true)) {
					render "success"
				}
				else {
					render "error"
				}
			}
			else {
				render "error"
			}
		}
	}

	def listJson = {

		def sortIndex = params.sidx ?: 'nombre'
		def sortOrder  = params.sord ?: 'asc'
		def maxRows = Integer.valueOf(params.rows)
		def currentPage = Integer.valueOf(params.page) ?: 1
		def rowOffset = currentPage == 1 ? 0 : (currentPage - 1) * maxRows


		def estados = EstadoDeConsolidacion.createCriteria().list(max: maxRows, offset: rowOffset) { order(sortIndex, sortOrder) }

		def totalRows = estados.totalCount
		def numberOfPages = Math.ceil(totalRows / maxRows)


		def results = estados?.collect {

			[
				cell: [it.nombre],
				id: it.id
			]
		}


		def jsonData = [rows: results, page: currentPage, records: totalRows, total: numberOfPages]

		render jsonData as JSON
	}
	
	def comboJson = {
		
		def lst = EstadoDeConsolidacion.findAll()
		
			StringBuffer buf = new StringBuffer("<select>")
			buf.append("<option value=\"${-1}\">")
			buf.append("")
			lst.each{
				buf.append("<option value=\"${it.id}\">")
				buf.append(it.toString())
				buf.append("</option>")
			}
			buf.append("</select>")
		
			render buf.toString()
		
	}
	

}
